package com.artconcurrency.chapter4;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @ClassName com.artconcurrency.chapter4
 * Description:
 *      过期的方法Suspend、resume、stop
 * suspend，使线程暂停，但是不会释放类似锁这样的资源。
 *
 * resume，使线程恢复，如果之前没有使用suspend暂停线程，则不起作用。
 *
 * stop，停止当前线程。不会保证释放当前线程占有的资源。
 *
 * 如何安全的暂停一个线程？可以利用通知／等待的机制来代替
 *   比如使用一个volatile修饰的boolean类型的标志在循环的时候判断是否已经停止。
 * <p>
 * <使用说明>
 * </p>
 * @Author tree
 * @Date 2019-05-01 22:32
 * @Version 1.0
 */
public class Deprecated {
    public static void main(String[] args) {
        DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
        Thread printThread = new Thread(new Runner(),"Print Thread");
        printThread.setDaemon(true);
        printThread.start();
        SleepUtils.second(3);

        //将printThread暂停，输出内容工作暂停
        printThread.suspend();
        System.out.println("Main suspend Print Thread at :"+ dateFormat.format(new Date()));
        SleepUtils.second(3);
        //将printThread恢复，输出内容继续
        printThread.resume();
        System.out.println("Main resume Print Thread at :"+ dateFormat.format(new Date()));
        SleepUtils.second(3);

        //将printThread停止，输出内容停止
        printThread.stop();
        System.out.println("Main stop Print Thread at :"+ dateFormat.format(new Date()));
        SleepUtils.second(3);


    }


}
 class Runner implements Runnable {
    @Override
    public void run() {

        DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
        while (true) {
            System.out.println(Thread.currentThread().getName()+" run at " + dateFormat.format(new Date()));
            SleepUtils.second(2);
        }
    }
}
